Fox's Git Mirrors
Node / rns-mirrors / Reticulum-Go.git rns://e35de29a61974cd952fde3fe9c8500d5/rns-mirrors/Reticulum-Go.git
π Files β’ βΈ Work (0) β’ πΉ Commits (1071) β’ β Branches (3) β’ β Tags (18) β’ β₯ Thanks (0)
>Reticulum-Go
Reticulum-Go is a high-performance and secure Golang implementation of the Reticulum Network Stack. It is intended to strengthen the existing networks and bring Reticulum to more devices not to replace the python reference implementation.
Available on rngit:
NomadNet Node: T383838132f67e79d9b24aad014e93015fb858f:/page/index.mu
T383838git clone rns://06a54b505bb67b25ef3f8097e8001edc/public/Reticulum-Go
Overview
Reticulum-Go provides full protocol compatibility with the Python reference implementation. It leverages the Go concurrency model to deliver improved throughput and lower latency. The implementation is designed for cross-platform deployment across both modern and legacy systems.
For details on interoperability, see COMPATIBILITY.md. You can find the canonical network API reference at the Reticulum Manual.
Documentation Index
β’ Full English Documentation: docs/en/
β’ For Application Authors: API Reference and Examples
β’ Additional Languages: Translations will live alongside T383838docs/en/ as they become available.
Main Goals
β’ Excellent portability and support for legacy operating systems
β’ Clear auditability and supply chain security
β’ Full protocol interoperability with the Python reference implementation and its standard utilities
β’ High performance using modern Go concurrency patterns and optimized code
β’ High security with native sandboxing and firecracker microvm support
β’ Reliable operation with reconnect, NIC watching, and interface hot reload
Features
βββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββ
β Functional Area β Implementation Status β Notes β
βββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββ€
β Protocol Compatibility β Yes β Full wire compatibility with the Pythonβ¦ β
β Daemon and Utilities β Yes β Provided via a single T383838reticulum-go binaβ¦ β
β Core Network Stack β Yes β Includes packet processing, transport, β¦ β
β Links and Channels β Yes β Full support for links, resources, chanβ¦ β
β Cryptography β Yes β Centralized in T383838pkg/cryptography. See !. Application code should use T383838pkg/cryptography and T383838pkg/identity rather than writing ad hoc cryptographic operations.
Runtime Sandbox
The T383838reticulum-go daemon applies a platform-specific sandbox after startup. The sandbox is on by default. You can disable it by adding this option to your configuration file:
T282828
enable_sandbox = no
Depending on your platform, the sandbox uses different isolation mechanisms:
β’ Linux: Landlock (kernel 5.13+) restricts filesystem access to the folders the daemon needs, then a soft-fail seccomp-bpf denylist blocks high-risk syscalls.
β’ OpenBSD: Uses unveil and pledge to limit system and file operations.
β’ FreeBSD: Enters capability mode to isolate the process.
β’ Windows: Applies job-object limits to control system resources.
Refer to SECURITY.md for details and specific platform limitations.
Requirements
β’ Go version 1.26.5 or later
β’ Optional for Odin bindings: Odin compiler on T383838PATH (CI pins T383838dev-2026-06), plus CGO to build T383838librns.so
β’ Optional for Zig bindings: Zig compiler on T383838PATH (CI pins T3838380.16.0), plus CGO to build T383838librns.so
β’ Optional for Dart / Flutter bindings: Dart SDK on T383838PATH (CI pins T3838383.11.4). FFI tests also need CGO to build T383838librns.so
β’ Optional for Lua bindings: LuaJIT on T383838PATH, plus CGO to build T383838librns.so
β’ Optional for Swift bindings: Swift toolchain on T383838PATH (CI pins T3838386.0.3), plus CGO to build T383838librns.so
β’ Optional for Java bindings: JDK with T383838javac on T383838PATH (CI uses Temurin 17), plus CGO to build T383838librns.so
β’ Optional for Kotlin bindings: T383838kotlinc on T383838PATH (CI pins T3838382.1.10) and a JDK, plus CGO to build T383838librns.so
Quick Start
You can use the provided Makefile targets or run the equivalent go commands directly if you do not have Make installed.
Build
Compile the native binary:
T282828
make build
Or build manually using Go:
T282828
mkdir -p bin
CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/reticulum-go ./cmd/reticulum-go
The output binary will be created at T383838bin/reticulum-go.
Install
Install the main binary, legacy tool symlinks (such as rgostatus and rgoid), and man pages to the default prefix T383838/usr/local:
T282828
make install
To use a custom installation directory:
T282828
make install PREFIX=/opt/reticulum
To stage files for package managers:
T282828
make install DESTDIR=/tmp/stage PREFIX=/usr
Install as a service
Install init service files for the detected init system (or set T383838INIT):
T282828
make install-service
make install-service INIT=systemd
make install-service INIT=openrc
make install-service INIT=runit
make install-service INIT=dinit
make install-service INIT=all
Service units live under packaging/ (systemd, openrc, runit, dinit). The install creates T383838/var/lib/reticulum-go/ with a sample config that logs to both stderr and T383838/var/lib/reticulum-go/logfile/reticulum.log.
Alternatively, install directly into your Go binary directory:
T282828
CGO_ENABLED=0 go install -ldflags="-s -w" ./cmd/reticulum-go
Packaging
Build T383838.deb, T383838.rpm, or T383838.pkg.tar.zst packages using nfpm. The tool is fetched on demand:
T282828
make package-deb
make package-rpm
make package-arch
The package files are placed in the T383838dist/ folder. The packaging options are configured in packaging/nfpm.yaml.
Command Usage
Run the main daemon or query status and paths:
T282828
reticulum-go # Starts the background daemon
reticulum-go status # Displays interface statistics
reticulum-go slow # Bottleneck and local health findings
reticulum-go id -h # Shows identity options
reticulum-go probe ... # Proves path reachability
reticulum-go path -t # Inspects known paths
reticulum-go cp -l # Handles copy operations
reticulum-go x -l # Executes remote commands
reticulum-go pageserver # Runs the built-in page server
You can view the documentation by running manual commands:
β’ T383838man reticulum-go
β’ T383838man 8 reticulum-go
β’ T383838man reticulum-go-status
β’ T383838man reticulum-go-slow
Run from Source
Run the daemon directly from the source code:
T282828
make run
Or run manually:
T282828
go run ./cmd/reticulum-go
Run Tests
Run the full test suite:
T282828
make test
Host OS preflight (sandbox, interfaces, short daemon):
T282828
make test-self-check
Or run manually:
T282828
go test -v ./...
Makefile Reference
ββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬ββββββ
β Target β Description β Eqβ¦ β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββ€
β make / T383838make all β Compiles the release binary. β Maβ¦ β
β T383838make build β Compiles a stripped, static release binary. β T383838CGβ¦ β
β T383838make build-utils β Alias for building the main binary. β Suβ¦ β
β T383838make install β Installs the binary, legacy symlinks, and man pages. β Inβ¦ β
β T383838make install-man β Installs only the manual pages. β Inβ¦ β
β T383838make install-service β Installs systemd, openrc, runit, and/or dinit service fileβ¦ β β¦ β
β T383838make package-deb β Builds a Debian package. β Ouβ¦ β
β T383838make package-rpm β Builds an RPM package. β Ouβ¦ β
β T383838make package-arch β Builds an Arch Linux package. β Ouβ¦ β
β T383838make uninstall β Removes the binary, symlinks, and man pages. β Deβ¦ β
β T383838make clean β Deletes build and test artifacts. β Ruβ¦ β
β T383838make test β Runs the full test suite. β Ruβ¦ β
β T383838make test-short β Runs only short unit tests. β Ruβ¦ β
β T383838make test-race β Runs tests with the Go race detector enabled. β Ruβ¦ β
β T383838make test-services β Docker tests for logfile + systemd/openrc/runit/dinit servβ¦ β Ruβ¦ β
β T383838make test-self-check β Host OS preflight for reticulum-go platform features. β Ruβ¦ β
β T383838make test-self-check-386 β Linux 386 self-check under qemu-user. β Ruβ¦ β
β T383838make test-self-check-arm β Linux arm (GOARM=6) self-check under qemu-user. β Ruβ¦ β
β T383838make test-self-check-riscv64 β Linux riscv64 self-check under qemu-user. β Ruβ¦ β
β T383838make test-self-check-ppc64le β Linux ppc64le self-check under qemu-user. β Ruβ¦ β
β T383838make test-self-check-ppc64 β Linux ppc64 (big-endian) self-check under qemu-user. β Ruβ¦ β
β T383838make coverage β Generates and opens a test coverage report. β Ruβ¦ β
β T383838make bench β Runs all benchmark tests. β Ruβ¦ β
β T383838make fmt β Formats all Go source files. β Ruβ¦ β
β T383838make vet β Runs the standard Go vet tool. β Ruβ¦ β
β T383838make lint β Runs the revive linter. β Ruβ¦ β
β T383838make vulncheck β Runs govulncheck. β Ruβ¦ β
β T383838make check β Runs formatting, vetting, linting, short tests, and vulnchβ¦ β Ruβ¦ β
β T383838make deps β Downloads and verifies Go modules. β Ruβ¦ β
β T383838make run β Compiles and runs the daemon. β Ruβ¦ β
β T383838make debug β Compiles a standard debug binary with symbols. β Ruβ¦ β
β T383838make microvm-up β Prepare and start Firecracker microvm + host bridge. β Ruβ¦ β
β T383838make microvm-stop β Stop Firecracker microvm and host bridge. β Ruβ¦ β
β T383838make build-linux β Cross-compiles for Linux. β Crβ¦ β
β T383838make build-windows β Cross-compiles for Windows. β Crβ¦ β
β T383838make build-windows-legacy β Cross-compiles for legacy Windows releases. β Coβ¦ β
β T383838make build-darwin β Cross-compiles for macOS. β Crβ¦ β
β T383838make build-all β Cross-compiles for all major platforms. β Coβ¦ β
β T383838make tree-rsm-verify β Verifies T383838reticulum-go.rsm signature and file hashes. β T383838shβ¦ β
β T383838make tree-rsm-sign β Signs the tree inventory into T383838reticulum-go.rsm. β Reβ¦ β
β T383838make hooks-install β Enables the tracked pre-commit hook (YAML/shellcheck + RSMβ¦ β T383838shβ¦ β
ββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ΄ββββββ
Taskfile Automation
The project provides a Taskfile for advanced local automation. If you have Task installed, run T383838task --list to view all available tasks.
T282828
task build
task install
task test
On some Linux distributions, the command is named T383838go-task instead of task. You can add an alias to your shell profile if needed:
T282828
alias task='go-task'
Development and Contributions
Code Quality Checks
Run the verification suite before submitting pull requests:
T282828
make fmt
make vet
make lint
make check
These targets format code, run static analysis, check for common linter issues, and run short tests to ensure regressions are not introduced.
Cross-Platform Builds
Verify cross-compilation across platforms:
T282828
make build-linux
make build-windows
make build-darwin
make build-all
Cross-compilation uses the same optimization flags as native builds. See the Makefile targets for exact environmental variables.
Windows 7, 8, and 8.1 Support
Official Go 1.21 and newer releases no longer support Windows 7. To support legacy deployments, we compile our legacy Windows releases using go-legacy-win7. This maintained fork restores compatibility with Windows 7, 8, 8.1, Server 2008 R2, and Server 2012 R2.
Official tagged releases include T383838reticulum-go-windows-amd64-win7.exe and T383838reticulum-go-windows-arm64-win7.exe binaries. These files run on both modern and legacy Windows installations.
To compile legacy Windows binaries locally, install go-legacy-win7 and run:
T282828
make build-windows-legacy
Or build using Task:
T282828
task build-windows-legacy
You can also specify a custom path to your legacy Go compiler:
T282828
GO_LEGACY_WIN7=/usr/local/go-legacy-win7/bin/go make build-windows-legacy
CI uses a pinned Go 1.26.5 compiler via GitHub Actions. Legacy Windows builds use T383838scripts/ci/setup-go-legacy-win7.sh to download and verify the legacy compiler.
WebAssembly and Embedded Targets
To compile the WebAssembly binary, run the following Task commands:
T282828
task build-wasm
task test-wasm
librns Shared Library
For in-process embedding in C, C++, and Python (FFI), we provide a C ABI target. The main daemon is built with T383838CGO_ENABLED=0, but the shared library compilation requires CGO.
To build the shared library:
T282828
task build-librns
make -C bindings/c/examples/smoke
./bindings/c/examples/smoke/librns-smoke
This compiles the shared library to T383838bin/librns.so and generates header definitions at T383838include/rns.h. For details, see docs/en/librns.md.
Odin Bindings
Idiomatic Odin wrappers over T383838librns.so live in T383838bindings/odin. Requires the Odin compiler on T383838PATH.
T282828
task build-librns
task test-odin
Covers node lifecycle, identity, destinations, paths, links, and events. Details: docs/en/librns.md.
Zig Bindings
Idiomatic Zig wrappers over T383838librns.so live in T383838bindings/zig. Requires Zig 0.16.0 or later on T383838PATH.
T282828
task build-librns
task test-zig
Covers the same ABI surface as the Odin bindings. Details: docs/en/librns.md.
C++ Bindings
Idiomatic C++17 RAII wrappers over T383838librns.so live in T383838bindings/cpp. Requires CMake and a C++17 compiler.
T282828
task build-librns
task test-cpp
Covers the same ABI surface as the Odin and Zig bindings. Details: docs/en/librns.md.
Rust Bindings
Safe Rust wrappers over T383838librns.so live in T383838bindings/rust. Requires T383838cargo on T383838PATH.
T282828
task build-librns
task test-rust
Details: docs/en/librns.md.
Python Bindings
ctypes wrappers over T383838librns.so live in T383838bindings/python.
T282828
task build-librns
task test-python
Details: docs/en/librns.md.
Lua Bindings
LuaJIT FFI wrappers over T383838librns.so live in T383838bindings/lua.
T282828
task build-librns
task test-lua
Details: docs/en/librns.md.
Swift Bindings
SwiftPM wrappers over T383838librns.so live in T383838bindings/swift.
T282828
task build-librns
task test-swift
Details: docs/en/librns.md.
Java Bindings
JNA wrappers over T383838librns.so live in T383838bindings/java.
T282828
task build-librns
task test-java
Details: docs/en/librns.md.
Kotlin Bindings
Kotlin facade over the Java JNA bindings lives in T383838bindings/kotlin.
T282828
task build-librns
task test-kotlin
Details: docs/en/librns.md.
Dart / Flutter Bindings
Package rns_control in T383838bindings/dart provides:
β’ In-process librns FFI (T383838package:rns_control/ffi.dart) on Linux, Android, and Windows
β’ Control API HTTP and WebSocket client for a running daemon
T282828
task build-librns
task test-dart
# cross-build native libraries
task build-librns-targets -- linux android windows
Details: docs/en/librns.md and docs/en/control-api.md.
If you are compiling for TinyGo and small microcontroller boards, check out our tinygo branch. This requires TinyGo version 0.41.0 or newer.
Vendored Dependencies and Offline Builds
Why We Vendor Dependencies
We fully vendor all third-party dependencies. The source trees are stored inside the T383838vendor/ directory of this repository. This approach provides several key benefits:
β’ Build Reliability: Compilation and testing do not depend on downloading external modules. This allows you to build the project in completely air-gapped or offline environments.
β’ Release Stability: Release builds do not rely on the public availability of module proxies or upstream hosting platforms.
β’ Auditability and Security: Every dependency change or upgrade appears as a standard file diff in pull requests. This makes it straightforward to inspect third-party changes during code audits.
β’ Supply Chain Control: Normal builds compile the exact source code committed in the repository, protecting you against upstream dependency attacks.
Versions and checksums are still officially tracked inside the T383838go.mod and T383838go.sum files. The T383838vendor/ directories serve as the canonical source copy for our compilers.
Offline Build Configurations
The continuous integration pipeline uses these identical flags. The only exception is scripts that install standalone CLI tools, such as revive or gosec in our setup scripts. These temporary installation tasks temporarily clear the environment flags to fetch the binary tools, but the actual project code is always compiled from the local T383838vendor/ folder.
Synchronizing Sibling Libraries
If you are developing first-party libraries under T383838Reticulum-Go-Projects/, you can synchronize imports using:
T282828
task vendor-sync
Alternatively, run:
T282828
make deps
Set the T383838LIBS_ROOT environment variable to point to your local libraries repository. This command will update the replace paths in T383838go.mod and update the vendor folders. Make sure to commit the updated T383838go.mod, T383838go.sum, and updated T383838vendor/ trees.
Ordinary source checkouts only need the T383838vendor/ directories to build offline. Sibling repository checkouts are only required if you are actively updating or re-vendoring first-party libraries.
The T383838examples/wasm and T383838examples/pageserver examples contain their own independent T383838go.mod and T383838vendor/ files. The Docker configurations under T383838docker/ copy these folders to build matching containers offline.
AI Disclaimer
Open-weight LLMs, preferably operated locally under a controlled harness, may assist with non-critical tasks such as commit messages, documentation, drafts, translations, and tests. LLMs are strictly excluded from cryptography, key handling, protocol security logic, and any other security-sensitive development. All LLM output is reviewed and approved by a human. Design decisions and security-critical changes are made exclusively by humans.
Credit
License
Served by rngit 1.4.1 - Generated in 0.09s